package br.com.SGF.bean;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.SGF.dao.CidadeDAO;
import br.com.SGF.dao.ClienteDAO;
import br.com.SGF.domain.CidadeDomain;
import br.com.SGF.domain.ClienteDomain;
import br.com.SGF.util.JSFUtil;

@SuppressWarnings("serial")
@ManagedBean(name = "MBCliente")
@ViewScoped
public class ClienteBean implements Serializable {

	private List<CidadeDomain> listaCidade;
	private ClienteDomain clienteDomain;
	private List<ClienteDomain> clientes;
	private List<ClienteDomain> clientesFiltrados;

	public List<CidadeDomain> getListaCidade() {
		return listaCidade;
	}

	public void setListaCidade(List<CidadeDomain> listaCidade) {
		this.listaCidade = listaCidade;
	}

	public ClienteDomain getCliente() {
		if (clienteDomain == null) {
			clienteDomain = new ClienteDomain();
		}
		return clienteDomain;
	}

	public void setCliente(ClienteDomain cliente) {

		this.clienteDomain = cliente;
	}

	public List<ClienteDomain> getClientes() {
		return clientes;
	}

	public void setClientes(List<ClienteDomain> clientes) {
		this.clientes = clientes;
	}

	public List<ClienteDomain> getClienteFiltrados() {
		return clientesFiltrados;
	}

	public void setClienteFiltrados(List<ClienteDomain> clienteFiltrados) {
		this.clientesFiltrados = clienteFiltrados;
	}

	public void carregarClientes() {
		try {
			ClienteDAO cliDao = new ClienteDAO();
			clientes = cliDao.listarCliente();
		} catch (RuntimeException ex) {
			ex.printStackTrace();
			JSFUtil.adicionarMensagemErro(ex.getMessage());

		}
	}

	public void prepararNovo() {
		try {
			clienteDomain = new ClienteDomain();

			CidadeDAO cidDao = new CidadeDAO();
			listaCidade = cidDao.listarCidade();
		} catch (RuntimeException ex) {
			ex.printStackTrace();
			JSFUtil.adicionarMensagemErro(ex.getMessage());
		}
	}

	public void incluirCliente() {
		try {
			ClienteDAO cliDao = new ClienteDAO();

			clienteDomain
					.setDataAlteracao(new Date(System.currentTimeMillis()));
			cliDao.salvarCliente(clienteDomain);

			clientes = cliDao.listarCliente();

			JSFUtil.adicionarMensagemSucesso("Cliente salvo com sucesso!");
		} catch (RuntimeException ex) {
			ex.printStackTrace();
			JSFUtil.adicionarMensagemErro(ex.getMessage());
		}
	}

	public void excluirCliente() {
		try {
			ClienteDAO cliDao = new ClienteDAO();
			cliDao.excluirCliente(clienteDomain);
			clientes = cliDao.listarCliente();

			JSFUtil.adicionarMensagemSucesso("Cliente excluido com sucesso!");

		} catch (RuntimeException ex) {
			ex.printStackTrace();
			JSFUtil.adicionarMensagemErro(ex.getMessage());
		}
	}

	public void prepararEditar() {
		try {
			CidadeDAO cidDao = new CidadeDAO();

			listaCidade = cidDao.listarCidade();
		} catch (RuntimeException ex) {
			ex.printStackTrace();
			JSFUtil.adicionarMensagemErro(ex.getMessage());
		}
	}

	public void alterarCliente() {
		try {
			ClienteDAO cliDao = new ClienteDAO();

			clienteDomain
					.setDataAlteracao(new Date(System.currentTimeMillis()));

			cliDao.editarProduto(clienteDomain);

			clientes = cliDao.listarCliente();

			JSFUtil.adicionarMensagemSucesso("Cliente alterado com sucesso!");
		} catch (RuntimeException ex) {
			ex.printStackTrace();
			JSFUtil.adicionarMensagemErro(ex.getMessage());
		}
	}

}
